<template>
  <div class="tinymce-editor">
    <editor
      v-if="!reloading"
      v-model="myValue"
      :init="init"
      :disabled="disabled"
      @onClick="onClick">
    </editor>
  </div>
</template>

<script>
  import tinymce from 'tinymce/tinymce'
  import Editor from '@tinymce/tinymce-vue'
  import 'tinymce/themes/silver/theme'
  import 'tinymce/plugins/image'
  import 'tinymce/plugins/link'
  import 'tinymce/plugins/media'
  import 'tinymce/plugins/table'
  //import 'tinymce/plugins/code'
  import 'tinymce/plugins/lists'
  import 'tinymce/plugins/contextmenu'
  import 'tinymce/plugins/wordcount'
  import 'tinymce/plugins/colorpicker'
  import 'tinymce/plugins/textcolor'
  import 'tinymce/plugins/fullscreen'
  import 'tinymce/icons/default'
  import { uploadAction,getFileAccessHttpUrl } from '@/api/manage'
  import { getVmParentByName } from '@/utils/util'
  export default {
    components: {
      Editor
    },
    props: {
      value: {
        type: String,
        required:false
      },
      /*这个属性用于控制文件上传的业务路径*/
      bizPath:{
        type:String,
        required:false,
        default:"jeditor"
      },
      /*这个属性用于控制文件上传是否添加水印*/
      watermark:{
        type:String,
        required:false,
        default:"true"
      },
      triggerChange:{
        type: Boolean,
        default: false,
        required:false
      },
      height: {
        type: Number,
        default: 400,
        required:false
      },
      disabled: {
        type: Boolean,
        default: false
      },
      plugins: {
        type: [String, Array],
        default: 'lists image link media table textcolor wordcount contextmenu fullscreen'
      },
      toolbar: {
        type: [String, Array],
        default: 'undo redo restoredraft | cut copy paste pastetext | forecolor backcolor bold italic underline strikethrough link anchor | alignleft aligncenter alignright alignjustify outdent indent | styleselect formatselect fontselect fontsizeselect | bullist numlist | blockquote subscript superscript removeformat | table image media charmap emoticons hr pagebreak insertdatetime print preview | fullscreen | bdmap indent2em lineheight formatpainter axupimgs',
        branding:true
      }
    },
    data() {
      return {
        //初始化配置
        init: {
          /*menu: {
            file: {title: '文件', items: 'newdocument'},
            edit: {title: '编辑', items: 'undo redo | cut copy paste pastetext | selectall'},
            insert: {title: '插入', items: 'link media | template hr'},
            view: {title: '查看', items: 'visualaid'},
            format: {title: '格式', items: 'bold italic underline strikethrough superscript subscript | formats | removeformat'},
            table: {title: '表格', items: 'inserttable tableprops deletetable | cell row column'},
            tools: {title: '工具', items: 'spellchecker code'}
          },*/
          language_url: '/tinymce/langs/zh_CN.js',
          language: 'zh_CN',
          skin_url: '/tinymce/skins/lightgray',
          height: this.height,
          plugins: this.plugins,
          toolbar: this.toolbar,
          branding: false,
          menubar: false,
          toolbar_drawer: false,
          images_upload_handler: (blobInfo, success) => {
            let formData = new FormData()
            formData.append('file', blobInfo.blob(), blobInfo.filename());
            formData.append('biz', this.bizPath);
            formData.append('watermark', this.watermark);
            formData.append("jeditor","1");
            let url = "/sys/common/upload";  /*window._CONFIG['domianURL']+*/
           /* if(window._CONFIG['domianURL'].indexOf("/shop/shop")!==-1){
              let urls = window._CONFIG['domianURL'].substring(0,window._CONFIG['domianURL'].length-5);
              url = urls+"/sys/common/upload";
            }else if(window._CONFIG['domianURL'].indexOf("/xzszjava/xzszjava")!==-1){
              let urls = window._CONFIG['domianURL'].substring(0,window._CONFIG['domianURL'].length-9);
              url = urls+"/sys/common/upload";
            }else{
              url = window._CONFIG['domianURL']+"/sys/common/upload";
            }*/
            /*if(window._CONFIG['domianURL'].indexOf("/hsStreet/hsStreet")!==-1){
              let urls = window._CONFIG['domianURL'].substring(0,window._ CONFIG['domianURL'].length-8);
              url = urls+"/sys/common/upload";
            }*/
            uploadAction(url, formData).then((res) => {
              if (res.success) {
                if(res.message == 'local'){
                  const img = 'data:image/jpeg;base64,' + blobInfo.base64()
                  success(img)
                }else{
                  let img = getFileAccessHttpUrl(res.message)
                  success(img)
                }
              }
            })
          }
        },
        myValue: this.value,
        reloading: false,
      }
    },
    mounted() {
      this.initATabsChangeAutoReload()
    },
    methods: {

      reload() {
        this.reloading = true
        this.$nextTick(() => this.reloading = false)
      },

      onClick(e) {
        this.$emit('onClick', e, tinymce)
      },
      //可以添加一些自己的自定义事件，如清空内容
      clear() {
        this.myValue = ''
      },

      /**
       * 自动判断父级是否是 <a-tabs/> 组件，然后添加事件监听，自动触发reload()
       *
       * 由于 tabs 组件切换会导致 tinymce 无法输入，
       * 只有重新加载才能使用（无论是vue版的还是jQuery版tinymce都有这个通病）
       */
      initATabsChangeAutoReload() {
        // 获取父级
        let tabs = getVmParentByName(this, 'ATabs')
        let tabPane = getVmParentByName(this, 'ATabPane')
        if (tabs && tabPane) {
          // 用户自定义的 key
          let currentKey = tabPane.$vnode.key
          // 添加事件监听
          tabs.$on('change', (key) => {
            // 切换到自己时执行reload
            if (currentKey === key) {
              this.reload()
            }
          })
          //update--begin--autor:liusq-----date:20210316------for：富文本编辑器tab父组件可能导致的赋值问题------
          this.reload()
          //update--end--autor:liusq-----date:20210316------for：富文本编辑器tab父组件可能导致的赋值问题------
        }else{
          //update--begin--autor:wangshuai-----date:20200724------for：富文本编辑器切换tab无法修改------
          let tabLayout = getVmParentByName(this, 'TabLayout')
          tabLayout.excuteCallback(()=>{
            this.reload()
          })
          //update--begin--autor:wangshuai-----date:20200724------for：文本编辑器切换tab无法修改------
        }
      },

    },
    watch: {
      value(newValue) {
        this.myValue = (newValue == null ? '' : newValue)
      },
      myValue(newValue) {
        if(this.triggerChange){
          this.$emit('change', newValue)
        }else{
          this.$emit('input', newValue)
        }
      }
    }
  }

</script>
<style scoped>
</style>